package com.zzy.center.controller;

import com.zzy.center.utils.ConstantWxUtils;
import com.zzy.servicebase.exceptionhandler.GuliException;
import org.springframework.web.bind.annotation.*;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

/**
 * @Author KAZU
 * @Date 2023/1/20 11:44
 * @Version 1.0
 */
@SuppressWarnings({"all"})
@RestController
@RequestMapping("/api/ucenter/wx")
@CrossOrigin
public class WxApiController {

	// 生成二维码
	@GetMapping("login")
	public String getWxCode() {
//		String url = "https://open.weixin.qq.com/"+
//				"connect/qrconnect?appid=" + ConstantWxUtils.WX_OPEN_APP_ID +
//				"&response_type=code";
		// 微信开放平台授权baseUrl
		String baseUrl = "https://open.weixin.qq.com/connect/qrconnect" +
		"?appid=%s" +
		"&redirect_uri=%s" +
		"&response_type=code" +
		"&scope=snsapi_login" +
		"&state=%s" +
		"#wechat_redirect";
		
		// 回调地址
		String redirectUrl = ConstantWxUtils.WX_OPEN_REDIRECT_URL; //获取业务服务器重定向地址
		try {
			redirectUrl = URLEncoder.encode(redirectUrl, "UTF-8"); //url编码
		} catch (UnsupportedEncodingException e) {
			throw new GuliException(20001, e.getMessage());
		}
		
		// 防止csrf攻击（跨站请求伪造攻击）
		//String state = UUID.randomUUID().toString().replaceAll("-", "");//一般情况下会使用一个随机数
		String state = "imhelen";//为了让大家能够使用我搭建的外网的微信回调跳转服务器，这里填写你在ngrok的前置域名
		System.out.println("state = " + state);
		
		// 采用redis等进行缓存state 使用sessionId为key 30分钟后过期，可配置
		//键："wechar-open-state-" + httpServletRequest.getSession().getId()
		//值：satte
		//过期时间：30分钟
		//生成qrcodeUrl
		String qrcodeUrl = String.format(
				baseUrl,
				ConstantWxUtils.WX_OPEN_APP_ID,
				redirectUrl,
				state);
		return "redirect:" + qrcodeUrl;
	}

}
